version = "0.1.0"
dependencies = [
"curl 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "docopt 0.6.22 (registry+https://github.com/rust-lang/crates.io-index)",
+ "docopt 0.6.23 (registry+https://github.com/rust-lang/crates.io-index)",
"flate2 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
"git2 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
"glob 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
[[package]]
name = "docopt"
-version = "0.6.22"
+version = "0.6.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"regex 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
cx: &Context,
kind: Kind) -> CargoResult<CommandPrototype> {
let layout = cx.layout(package, kind);
- cmd = cmd.arg("-L").arg(layout.root());
- cmd = cmd.arg("-L").arg(layout.deps());
+ cmd = cmd.arg("-L").arg(format!("dependency={}", layout.root().display()));
+ cmd = cmd.arg("-L").arg(format!("dependency={}", layout.deps().display()));
cmd = cmd.env("OUT_DIR", if package.has_custom_build() {
Some(layout.build_out(package))
}
});
for dir in dirs.into_iter() {
- cmd = cmd.arg("-L").arg(dir);
+ cmd = cmd.arg("-L").arg(format!("native={}", dir.display()));
}
for &(pkg, target) in cx.dep_targets(package, target).iter() {
target.is_lib() && target.get_profile().is_compile()
});
- if target.is_bin() && !target.get_profile().is_custom_build() {
- for target in targets.filter(|f| !f.is_staticlib()) {
+ if (target.is_bin() || target.is_example()) &&
+ !target.get_profile().is_custom_build() {
+ for target in targets.filter(|f| f.is_rlib() || f.is_dylib()) {
cmd = try!(link_to(cmd, package, target, cx, kind));
}
}
});
for filename in try!(cx.target_filenames(target)).iter() {
+ if filename.as_bytes().ends_with(b".a") { continue }
let mut v = Vec::new();
v.push_all(target.get_name().as_bytes());
v.push(b'=');
-C extra-filename=-[..] \
--out-dir {dir}{sep}target \
--emit=dep-info,link \
- -L {dir}{sep}target \
- -L {dir}{sep}target{sep}deps`
+ -L dependency={dir}{sep}target \
+ -L dependency={dir}{sep}target{sep}deps`
",
running = RUNNING, compiling = COMPILING, sep = path::SEP,
dir = p.root().display(), url = p.url(),
--cfg ndebug \
--out-dir {dir}{sep}target{sep}release \
--emit=dep-info,link \
- -L {dir}{sep}target{sep}release \
- -L {dir}{sep}target{sep}release{sep}deps`
+ -L dependency={dir}{sep}target{sep}release \
+ -L dependency={dir}{sep}target{sep}release{sep}deps`
",
running = RUNNING, compiling = COMPILING, sep = path::SEP,
dir = p.root().display(),
-C extra-filename=-[..] \
--out-dir {dir}{sep}target \
--emit=dep-info,link \
- -L {dir}{sep}target \
- -L {dir}{sep}target{sep}deps`
+ -L dependency={dir}{sep}target \
+ -L dependency={dir}{sep}target{sep}deps`
",
running = RUNNING, compiling = COMPILING, sep = path::SEP,
dir = p.root().display(),
-C extra-filename=-[..] \
--out-dir {dir}{sep}target{sep}release \
--emit=dep-info,link \
- -L {dir}{sep}target{sep}release \
- -L {dir}{sep}target{sep}release{sep}deps`
+ -L dependency={dir}{sep}target{sep}release \
+ -L dependency={dir}{sep}target{sep}release{sep}deps`
",
running = RUNNING, compiling = COMPILING, sep = path::SEP,
dir = p.root().display(),
-C extra-filename=-[..] \
--out-dir {dir}{sep}target{sep}release{sep}deps \
--emit=dep-info,link \
- -L {dir}{sep}target{sep}release{sep}deps \
- -L {dir}{sep}target{sep}release{sep}deps`
+ -L dependency={dir}{sep}target{sep}release{sep}deps \
+ -L dependency={dir}{sep}target{sep}release{sep}deps`
{compiling} test v0.0.0 ({url})
{running} `rustc {dir}{sep}src{sep}lib.rs --crate-name test --crate-type lib \
-C opt-level=3 \
-C extra-filename=-[..] \
--out-dir {dir}{sep}target{sep}release \
--emit=dep-info,link \
- -L {dir}{sep}target{sep}release \
- -L {dir}{sep}target{sep}release{sep}deps \
+ -L dependency={dir}{sep}target{sep}release \
+ -L dependency={dir}{sep}target{sep}release{sep}deps \
--extern foo={dir}{sep}target{sep}release{sep}deps/\
{prefix}foo-[..]{suffix} \
--extern foo={dir}{sep}target{sep}release{sep}deps/libfoo-[..].rlib`
foo::foo();
}"#);
- assert_that(p.cargo_process("build"), execs().with_status(0));
+ assert_that(p.cargo_process("build").arg("-v"), execs().with_status(0));
});
test!(opt_out_of_lib {
assert_that(p.process(cargo_dir().join("cargo")).arg("run"),
execs().with_status(0));
});
+
+test!(transitive_dependencies_not_available {
+ let p = project("foo")
+ .file("Cargo.toml", r#"
+ [package]
+ name = "foo"
+ version = "0.0.1"
+ authors = []
+
+ [dependencies.a]
+ path = "a"
+ "#)
+ .file("src/main.rs", "extern crate b; extern crate a; fn main() {}")
+ .file("a/Cargo.toml", r#"
+ [package]
+ name = "a"
+ version = "0.0.1"
+ authors = []
+
+ [dependencies.b]
+ path = "../b"
+ "#)
+ .file("a/src/lib.rs", "extern crate b;")
+ .file("b/Cargo.toml", r#"
+ [package]
+ name = "b"
+ version = "0.0.1"
+ authors = []
+ "#)
+ .file("b/src/lib.rs", "");
+
+ assert_that(p.cargo_process("build").arg("-v"),
+ execs().with_status(101)
+ .with_stderr("\
+[..] can't find crate for `b`
+[..] extern crate b; [..]
+[..]
+error: aborting due to previous error
+Could not compile `foo`.
+
+Caused by:
+ [..]
+"));
+});
--emit=dep-info,link \
--target {target} \
-C ar=my-ar-tool -C linker=my-linker-tool \
- -L {dir}{sep}target{sep}{target} \
- -L {dir}{sep}target{sep}{target}{sep}deps`
+ -L dependency={dir}{sep}target{sep}{target} \
+ -L dependency={dir}{sep}target{sep}{target}{sep}deps`
",
running = RUNNING,
compiling = COMPILING,
-C rpath \
--out-dir {dir}{sep}target \
--emit=dep-info,link \
- -L {dir}{sep}target \
- -L {dir}{sep}target{sep}deps`
+ -L dependency={dir}{sep}target \
+ -L dependency={dir}{sep}target{sep}deps`
",
running = RUNNING, compiling = COMPILING, sep = path::SEP,
dir = p.root().display(),
-C extra-filename=-[..] \
--out-dir {dir}{sep}target{sep}release{sep}deps \
--emit=dep-info,link \
- -L {dir}{sep}target{sep}release{sep}deps \
- -L {dir}{sep}target{sep}release{sep}deps`
+ -L dependency={dir}{sep}target{sep}release{sep}deps \
+ -L dependency={dir}{sep}target{sep}release{sep}deps`
{compiling} test v0.0.0 ({url})
{running} `rustc {dir}{sep}src{sep}lib.rs --crate-name test --crate-type lib \
-C opt-level=1 \
-C extra-filename=-[..] \
--out-dir {dir}{sep}target{sep}release \
--emit=dep-info,link \
- -L {dir}{sep}target{sep}release \
- -L {dir}{sep}target{sep}release{sep}deps \
+ -L dependency={dir}{sep}target{sep}release \
+ -L dependency={dir}{sep}target{sep}release{sep}deps \
--extern foo={dir}{sep}target{sep}release{sep}deps/\
{prefix}foo-[..]{suffix} \
--extern foo={dir}{sep}target{sep}release{sep}deps/libfoo-[..].rlib`